'''
面向对象的三大特性：
封装：
    对外隐藏类的细节，提供用于访问类成员的公开接口
    要满足以下2点要求。
        ? （1）将属性声明为私有属性。
        ? （2）添加2个供外界调用的公有方法，分别用于设置或获取私
有属性的值。
继承
多态
'''
# 1、封装
'''
----封装案例：银行卡类----
编写一个银行卡类：
属性：银行名称、卡号、密码、姓名、余额
方法：登录、存款、取款
封装属性：余额
封装方法：登录
增加方法：显示余额、初始化余额
'''


class Card:
    card_name = '浦发银行'

    def __init__(self, id, name, password):
        self.id = id
        self.name = name
        self.password = password
        self.__balance = 0

    def __login(self):
        tag = 0
        id = input('请输入你的卡号：')
        pwd = input('请输入你的密码：')
        if id == self.id and pwd == self.password:
            tag = 1
        return tag

    def save_money(self):
        tag = self.__login()
        if tag == 1:
            money = float(input('你的存入金额为：'))
            self.__balance += money
            print(f'存入成功，余额为{self.__balance}')

    def take_money(self):
        tag = self.__login()
        if tag == 1:
            money = float(input('你的取出金额为：'))
            if money <= self.__balance:
                self.__balance -= money
                print(f'取款成功，余额为{self.__balance}')
            else:
                print(f'取款失败，金额不足')

    def set_balance(self, money):
        tag = self.__login()
        if tag == 1:
            if money > 0:
                self.__balance += money
                print(f'初始化成功，余额为{self.__balance}')

    def get_balance(self):
        tag = self.__login()
        if tag == 1:
            return self.__balance


if __name__ == '__main__':
    card1 = Card('1001', 'zhangsan', '123')
    # print(card1.__balance) # 无法直接调用私有属性
    # card1.__login()  # 无法直接调用私有方法
    card1.set_balance(10)
    print(card1.get_balance())
